package com.zhx.common.chat.service.helper;

import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.StrUtil;
import com.zhx.common.user.domain.enums.ChatActiveStatusEnum;

public class ChatMemberHelper {
    private static final String SEPARATOR = "_";

    /**
     * 根据传入的cursor字符串解析出活跃状态和时间戳，并返回一个包含这两者的Pair对象。
     *
     * @param cursor 用于标识用户活跃状态和时间戳的字符串，格式为"状态码#时间戳"。
     * @return 返回一个Pair对象，其中第一个元素是解析出的活跃状态（默认为在线状态），第二个元素是时间戳字符串。
     */
    public static Pair<ChatActiveStatusEnum, String> getCursorPair(String cursor) {
        // 默认活跃状态为在线
        ChatActiveStatusEnum activeStatusEnum = ChatActiveStatusEnum.ONLINE;
        String timeCursor = null;
        // 如果传入的cursor不为空且包含分隔符
        if (StrUtil.isNotBlank(cursor)) {
            // 通过分隔符分割cursor字符串获取活跃状态和时间戳
            String activeStr = cursor.split(SEPARATOR)[0];
            String timeStr = cursor.split(SEPARATOR)[1];
            // 将活跃状态字符串转换为枚举类型
            activeStatusEnum = ChatActiveStatusEnum.of(Integer.parseInt(activeStr));
            timeCursor = timeStr;
        }
        // 返回包含活跃状态和时间戳的Pair对象
        return Pair.of(activeStatusEnum, timeCursor);
    }

    /**
     * 生成用于聊天记录查询的游标。
     * 游标由用户的状态和时间戳组成，用作查询聊天记录的定位标识。
     *
     * @param activeStatusEnum 用户的活跃状态枚举，定义了用户的状态。
     * @param timeCursor 时间戳，表示该游标对应的时间点。
     * @return 返回拼接后的游标字符串，格式为: 状态码 + SEPARATOR + 时间戳。
     */
    public static String generateCursor(ChatActiveStatusEnum activeStatusEnum, String timeCursor) {
        // 拼接游标字符串
        return activeStatusEnum.getStatus() + SEPARATOR + timeCursor;
    }
}
